package RapiWeb;

import RapiWeb.Evento.JP_BaseDatos_Evento;
import RapiWeb.Objeto.CampoBD;
import RapiWeb.Objeto.Tabla;
import RapiWeb.Objeto.Proyecto;
import Utilidades.Archivo;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.util.StringTokenizer;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;

public class JP_BaseDatos extends JPanel {

    private JPanel jP_Inicio;
    private JTextField txt_NomBD;
    private JTextField txt_NomEsquemaBD;
    private JTextField txt_Pre;
    private JTextField txt_PreNom;
    private JTextField txt_Cantidad;
    private JTextField[] txt_Var;
    private JTextField[] txt_Tamaño;
    private JComboBox cbo_Pre;
    private JComboBox cbo_Activo;
    private JComboBox[] cbo_Tipo;
    private JCheckBox[] chx_Ordena;
    private JCheckBox[] chx_Nulo;
    private String str_DirecCapaReporte;
    private String str_DirecCapaDatos;
    private String str_DirecCapaNegocios;
    private String str_DirecCapaEntidad;
    private String str_DirecProcedimientos;
    private String str_DirecDocumentacion;
    private String str_DirecTablas;
    private String[] str_Prefijos;
    private String[] str_Titulos;
    private String[] str_OpcionTipos;
    private int int_Cantidad;
    private JButton btn_Aceptar;
    private JButton btn_Generar;
    private JButton btn_Buscar;
    private Archivo arch_Doc;
    private Procedimiento sp;
    private Documentacion doc;
    private Clase_NET clase;
    private Proyecto proyecto;
    private JF_Principal principal;
    private Tabla tabla;
    private CampoBD[] camposBD;
    private JPanel jP_Var;
    private JScrollPane sp_Var;

    public JP_BaseDatos(JF_Principal principal) {
        this.principal = principal;
        tabla = new Tabla();
        setSize(200, 400);
        setLayout(new BorderLayout());
        m_IniciarDatos(principal.getProyecto());
        addComponentes();
    }

    /* ***********************************************************************
     ***               Sección de Setters y Getters                        ***
     *************************************************************************/
    /**
     *
     * @return int_Cantidad
     */
    public int getInt_Cantidad() {
        return int_Cantidad;
    }

    /**
     * Obtiene la ventana principal
     *
     * @return principal
     */
    public JF_Principal getPrincipal() {
        return principal;
    }

    /* ************************************************************************
     ***                 Seccion de Metodos                                 ***
     **************************************************************************/
    /**
     * Metodo para inicializar los datos necesarios
     *
     * @param proyecto
     */
    private void m_IniciarDatos(Proyecto proyecto) {
        this.proyecto = proyecto;
        str_Prefijos = new String[]{"Cat", "Pro", "Sis", "Otro"};
        str_Titulos = new String[]{"Nombre del Campo", "Tipo de Dato", "Tamaño", "Nulo", "Orden"};
        if (proyecto.getStr_Gestor().equals("SQLServer")) {
            str_OpcionTipos = new String[]{"INT", "VARCHAR", "DATE", "FLOAT", "NUMERIC", "SMALLDATETIME", "DATETIME", "BIT", "NVARCHAR"};
        } else if(proyecto.getStr_Gestor().equals("MySQL")){
            str_OpcionTipos = new String[]{"INT", "VARCHAR", "DATE", "TEXT"};
        }else {
            str_OpcionTipos = new String[]{"NUMBER", "VARCHAR2", "DATE", "TIMESTAMP", "CHAR", "VARCHAR", "CLOB"};
        }

    }

    /**
     * metodo para añadir los componenetes de la primera parte
     *
     */
    private void addComponentes() {
        jP_Inicio = new JPanel();
        jP_Inicio.setLayout(new BorderLayout());
        JPanel p_Norte = new JPanel();
        JPanel p_Centro = new JPanel();
        JPanel p_Sur = new JPanel();

        btn_Buscar = new JButton(new ImageIcon(getClass().getResource("/imagenes/buscar tabla.png")));
        btn_Generar = new JButton(new ImageIcon(getClass().getResource("/imagenes/generar.png")));
        btn_Aceptar = new JButton(new ImageIcon(getClass().getResource("/imagenes/aceptar.png")));
        btn_Buscar.setToolTipText("Buscar un archivo");
        btn_Generar.setToolTipText("Genera el codigo de un archivo ya existente");
        btn_Aceptar.setToolTipText("Muestra el panel para crear una tabla nueva");
        p_Norte.add(btn_Buscar);
        p_Norte.add(btn_Aceptar);
        p_Norte.add(btn_Generar);

        p_Centro.add(m_PanelNombres());
//        p_Sur.add(m_PanelDatosBD());

        jP_Inicio.add(p_Norte, "North");
        jP_Inicio.add(p_Centro, "Center");
//        jP_Inicio.add(p_Sur, "South");
        add(jP_Inicio, "West");
//        txt_NomBD.setText("Prueba");
//        txt_Cantidad.setText("50");
        addEventos();
        jP_Var = new JPanel();
        jP_Var.setBackground(Color.LIGHT_GRAY);
        sp_Var = new JScrollPane(jP_Var);
        add(sp_Var, "Center");

    }

    /**
     * Metodo para crear el panel de datos de la tabla
     *
     * @return p_DatosBD
     */
    private JPanel m_PanelDatosBD() {
        JPanel p_DatosBD = new JPanel();
        JPanel p_Oeste = new JPanel();
        JPanel p_Este = new JPanel();
        JPanel p_Prefijos = new JPanel();
        p_DatosBD.setLayout(new BorderLayout());
        p_Este.setLayout(new GridLayout(4, 1));
        p_Oeste.setLayout(new GridLayout(4, 1));
        p_Prefijos.setLayout(new GridLayout(1, 2));
        JLabel lbl_Pre = new JLabel("Prefijos: ");
        JLabel lbl_PreEjem = new JLabel("");

        JLabel lbl_Cantida = new JLabel("Campos: ");
        JLabel lbl_Activo = new JLabel("Activo: ");

        txt_Pre = new JTextField(3);
        txt_PreNom = new JTextField(3);
        cbo_Pre = new JComboBox(str_Prefijos);
        txt_Cantidad = new JTextField(3);
        cbo_Activo = new JComboBox(new String[]{"SI", "NO"});
        p_Prefijos.add(txt_Pre);
        p_Prefijos.add(txt_PreNom);

        p_Oeste.add(lbl_Pre);
        p_Oeste.add(lbl_PreEjem);
        p_Oeste.add(lbl_Cantida);
        p_Oeste.add(lbl_Activo);
        p_Este.add(cbo_Pre);
        p_Este.add(p_Prefijos);
        p_Este.add(txt_Cantidad);
        p_Este.add(cbo_Activo);
        p_DatosBD.add(p_Oeste, "West");
        p_DatosBD.add(p_Este, "East");

        return p_DatosBD;
    }

    /**
     * Metodo para crear el panel donde se coloca el nombre de la tabla
     *
     * @return p_NombreBD
     */
    private JPanel m_PanelNombres() {
        JPanel p_NombreBD = new JPanel();
        p_NombreBD.setLayout(new BorderLayout());
        JPanel p_Oeste = new JPanel();
        JPanel p_Este = new JPanel();
        p_Este.setLayout(new GridLayout(3, 1));
        p_Oeste.setLayout(new GridLayout(3, 1));
        JLabel lbl_NomEsquemaBD = new JLabel("Esquema: ");
        JLabel lbl_NomBD = new JLabel("Tabla: ");
        JLabel lbl_Cantida = new JLabel("Campos: ");
        txt_NomEsquemaBD = new JTextField(14);
        txt_NomBD = new JTextField(14);
        txt_Cantidad = new JTextField(3);

        p_Oeste.add(lbl_NomEsquemaBD);
        p_Oeste.add(lbl_NomBD);
        p_Oeste.add(lbl_Cantida);

        p_Este.add(txt_NomEsquemaBD);
        p_Este.add(txt_NomBD);
        p_Este.add(txt_Cantidad);

        p_NombreBD.add(p_Oeste, "West");
        p_NombreBD.add(p_Este, "East");
        return p_NombreBD;
    }

    /**
     * metodo para igualar los datos basicos fecha del sistema, autor, prefijo,
     * nombre de las clase, cantidad de campos
     */
    public void igualaDatos() {
        try {
            tabla.setStr_NomEsquema(txt_NomEsquemaBD.getText());
            tabla.setStr_NomTabla(txt_NomBD.getText());
            int_Cantidad = Integer.parseInt(txt_Cantidad.getText());
//            mensaje("**Primer paso: Datos capturados correctamente**");
        } catch (Exception e) {
            e.toString();
        }
    }

    /**
     * Metodo para mostrar la segunda parte en la creacion del proyecto
     *
     * @param num es el numero de campos de la tabla
     */
    public void addComponentes2() {
        int num = int_Cantidad;
        JPanel p_Centro = new JPanel();
        p_Centro.setLayout(new GridLayout(num, 1));

        txt_Var = new JTextField[num];
        cbo_Tipo = new JComboBox[num];
        chx_Ordena = new JCheckBox[num];
        chx_Nulo = new JCheckBox[num];
        txt_Tamaño = new JTextField[num];
//        String pre = txt_PreNom.getText();
        String pre = "";

        for (int i = 0; i < num; i++) {
            JPanel pFila = new JPanel();
            cbo_Tipo[i] = new JComboBox(str_OpcionTipos);
            chx_Nulo[i] = new JCheckBox("Nulo");
            chx_Ordena[i] = new JCheckBox("Ordenar");
            txt_Tamaño[i] = new JTextField(5);
            txt_Tamaño[i].setToolTipText(str_Titulos[2]);

            if (i == 0) {
                txt_Var[i] = new JTextField("nid", 12);
            } else {
                txt_Var[i] = new JTextField(pre, 12);
            }
            txt_Var[i].setToolTipText(str_Titulos[0]);

            int n = i + 1;
            if (n < 10) {
                pFila.add(new JLabel("0" + n));
            } else {
                pFila.add(new JLabel("" + n));
            }
            pFila.add(txt_Var[i]);
            pFila.add(cbo_Tipo[i]);
            pFila.add(txt_Tamaño[i]);
            pFila.add(chx_Nulo[i]);
            pFila.add(chx_Ordena[i]);
            p_Centro.add(pFila);
        }

        jP_Var.add(p_Centro, "Center");

    }

    /**
     * metodo para crear los archivos necesarios
     */
    public void m_CrearArchivos() {
        if (!txt_NomBD.getText().equals("")) {
            if (txt_NomBD.getText().indexOf(".txt") < 0) {
                igulaDatos2();
            }
            arch_Doc = new Archivo();
            sp = new Procedimiento(proyecto, tabla);
            clase = new Clase_NET(proyecto, tabla);
            doc = new Documentacion(tabla);
            crearArchivos();
            escribeArchivos();
        }
    }

    /**
     * Metodo para igualar los campos de la base de datos
     */
    public void igulaDatos2() {
        camposBD = new CampoBD[int_Cantidad];
        for (int i = 0; i < int_Cantidad; i++) {
            camposBD[i] = new CampoBD();
            camposBD[i].setStr_NomCampo(txt_Var[i].getText());
            camposBD[i].setStr_Tamaño(txt_Tamaño[i].getText());
            camposBD[i].setStr_Tipo(str_OpcionTipos[cbo_Tipo[i].getSelectedIndex()]);
            if (chx_Ordena[i].isSelected() == true) {
                camposBD[i].setStr_Ordenar("SI");
            } else {
                camposBD[i].setStr_Ordenar("NO");
            }

            if (chx_Nulo[i].isSelected() == true) {
                camposBD[i].setStr_Nulo("SI");
            } else {
                camposBD[i].setStr_Nulo("NO");
            }
        }
        tabla.setCamposBD(camposBD);
    }

    /**
     * Metodo para crear los archivo necesarios para las capas y los
     * procedimientos almacenados (solo los crea pero no escribe nada en el)
     */
    public void crearArchivos() {
        try {
            String str_Esquema = tabla.getStr_NomEsquema();
            String str_NomBD = tabla.getStr_NomTabla();
            String str_NomProyecto = proyecto.getStr_NomProyecto();
            //se asignan las direcciones donde se guardaran los archivos creados
            str_DirecCapaReporte = str_NomProyecto + "/Paginas/" + proyecto.getStr_ClasePresentacion() + str_NomBD + "/Reporte";
            str_DirecCapaDatos = str_NomProyecto + "/Codigo/CapaDatos";
            str_DirecCapaNegocios = str_NomProyecto + "/Codigo/CapaNegocios";
            str_DirecCapaEntidad = str_NomProyecto + "/Codigo/CapaEntidad";
            str_DirecProcedimientos = str_NomProyecto + "/Codigo/Procedimientos/" + str_NomBD;
            str_DirecDocumentacion = str_NomProyecto + "/Documentacion/" + str_NomBD;
            str_DirecTablas = str_NomProyecto + "/Tablas";
            //se crean las carpetas necesarias para guardar los archivos
            arch_Doc.m_CrearCarpeta(str_DirecCapaReporte);
            arch_Doc.m_CrearCarpeta(str_DirecCapaDatos);
            arch_Doc.m_CrearCarpeta(str_DirecCapaNegocios);
            arch_Doc.m_CrearCarpeta(str_DirecCapaEntidad);
            arch_Doc.m_CrearCarpeta(str_DirecProcedimientos);
            arch_Doc.m_CrearCarpeta(str_DirecDocumentacion);
            arch_Doc.m_CrearCarpeta(str_DirecTablas);
            //se crean los archivos donde se escriba el codigo
            if (proyecto.getStr_Lenguaje().equals("Java")) {
                arch_Doc.m_CrearArchivo(str_DirecCapaReporte + "/" + str_NomBD + "Reporte.jsp");
                arch_Doc.m_CrearArchivo(str_DirecCapaReporte + "/" + str_NomBD + "Reporte.jsp." + proyecto.getStr_Lenguaje());
            } else {
                arch_Doc.m_CrearArchivo(str_DirecCapaReporte + "/" + str_NomBD + "Reporte.aspx");
                arch_Doc.m_CrearArchivo(str_DirecCapaReporte + "/" + str_NomBD + "Reporte.aspx." + proyecto.getStr_Lenguaje());
            }

            arch_Doc.m_CrearArchivo(str_DirecCapaEntidad + "/" + str_NomBD + "." + proyecto.getStr_Lenguaje());
            arch_Doc.m_CrearArchivo(str_DirecCapaDatos + "/" + proyecto.getStr_ClaseDatos() + str_NomBD + "." + proyecto.getStr_Lenguaje());
            arch_Doc.m_CrearArchivo(str_DirecCapaNegocios + "/" + proyecto.getStr_ClaseNegocio() + str_NomBD + "." + proyecto.getStr_Lenguaje());
//            arch_Doc.m_CrearArchivo(str_DirecProcedimientos + "/" + proyecto.getStr_ProcedimientoSQL() + str_NomBD + "_Insertar.sql");
//            arch_Doc.m_CrearArchivo(str_DirecProcedimientos + "/" + proyecto.getStr_ProcedimientoSQL() + str_NomBD + "_Modificar.sql");
            arch_Doc.m_CrearArchivo(str_DirecProcedimientos + "/" + proyecto.getStr_ProcedimientoSQL() + str_NomBD + "_Borrar.sql");
            arch_Doc.m_CrearArchivo(str_DirecProcedimientos + "/" + proyecto.getStr_ProcedimientoSQL() + str_NomBD + "_Consulta.sql");
//            arch_Doc.m_CrearArchivo(str_DirecProcedimientos + "/" + proyecto.getStr_ProcedimientoSQL() + str_NomBD + "_Combo.sql");
            arch_Doc.m_CrearArchivo(str_DirecProcedimientos + "/" + proyecto.getStr_ProcedimientoSQL() + str_NomBD + "_ComboPorNombre.sql");
            arch_Doc.m_CrearArchivo(str_DirecProcedimientos + "/" + proyecto.getStr_ProcedimientoSQL() + str_NomBD + "_DetalleXML.sql");
            arch_Doc.m_CrearArchivo(str_DirecProcedimientos + "/" + proyecto.getStr_ProcedimientoSQL() + str_NomBD + "_DetalleXML sin Anexos.sql");
            arch_Doc.m_CrearArchivo(str_DirecProcedimientos + "/" + proyecto.getStr_ProcedimientoSQL() + str_NomBD + "_Paquete_Spec.sql");
            arch_Doc.m_CrearArchivo(str_DirecProcedimientos + "/" + proyecto.getStr_ProcedimientoSQL() + str_NomBD + "_Paquete_Body.sql");
            arch_Doc.m_CrearArchivo(str_DirecProcedimientos + "/" + proyecto.getStr_ProcedimientoSQL() + str_NomBD + "_Tabla.sql");
            arch_Doc.m_CrearArchivo(str_DirecProcedimientos + "/" + proyecto.getStr_ProcedimientoSQL() + str_NomBD + "_InsertarModificar.sql");
            arch_Doc.m_CrearArchivo(str_DirecProcedimientos + "/" + proyecto.getStr_ProcedimientoSQL() + str_NomBD + "_Sequence.sql");
            arch_Doc.m_CrearArchivo(str_DirecProcedimientos + "/" + proyecto.getStr_ProcedimientoSQL() + str_NomBD + "_TriggerInsert.sql");
            arch_Doc.m_CrearArchivo(str_DirecProcedimientos + "/" + proyecto.getStr_ProcedimientoSQL() + str_NomBD + "_TriggerUpdate.sql");

            arch_Doc.m_CrearArchivo(str_DirecDocumentacion + "/" + "diccionarioDatos.txt");
            arch_Doc.m_CrearArchivo(str_DirecTablas + "/" + str_Esquema+"."+str_NomBD + ".txt");
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Error JP_BaseDatos.crearArchivos: " + arch_Doc.dameError() + "\nException: " + ex.getMessage());
            String str_Error = "Error JP_BaseDatos.crearArchivos: " + arch_Doc.dameError() + "\nException: " + ex.getMessage();
            System.out.println(str_Error);
        }
    }

    /**
     * Metodo encargado de escribir el archivo previamente creado por el metodo
     * crearArchivos()
     */
    public void escribeArchivos() {
        String str_Esquema = tabla.getStr_NomEsquema();
        String str_NomBD = tabla.getStr_NomTabla();
        try {
            if (proyecto.getStr_Lenguaje().equals("Java")) {
                arch_Doc.m_SobreEscribir(str_DirecCapaReporte + "/" + str_NomBD + "Reporte.jsp", clase.m_CrearClaseReporteASPX());
                arch_Doc.m_SobreEscribir(str_DirecCapaReporte + "/" + str_NomBD + "Reporte.jsp." + proyecto.getStr_Lenguaje(), clase.m_CrearClaseReporte());
            } else {
                arch_Doc.m_SobreEscribir(str_DirecCapaReporte + "/" + str_NomBD + "Reporte.aspx", clase.m_CrearClaseReporteASPX());
                arch_Doc.m_SobreEscribir(str_DirecCapaReporte + "/" + str_NomBD + "Reporte.aspx." + proyecto.getStr_Lenguaje(), clase.m_CrearClaseReporte());
            }
            arch_Doc.m_SobreEscribir(str_DirecTablas + "/" + str_Esquema+"."+str_NomBD + ".txt", m_CamposTabla());
            arch_Doc.m_SobreEscribir(str_DirecCapaEntidad + "/" + str_NomBD + "." + proyecto.getStr_Lenguaje(), clase.m_CrearCapaEntidad());
            arch_Doc.m_SobreEscribir(str_DirecCapaDatos + "/" + proyecto.getStr_ClaseDatos() + str_NomBD + "." + proyecto.getStr_Lenguaje(), clase.m_CrearCapaDatos());
            arch_Doc.m_SobreEscribir(str_DirecCapaNegocios + "/" + proyecto.getStr_ClaseNegocio() + str_NomBD + "." + proyecto.getStr_Lenguaje(), clase.m_CrearCapaNegocios());
            arch_Doc.m_SobreEscribir(str_DirecProcedimientos + "/" + proyecto.getStr_ProcedimientoSQL() + str_NomBD + "_Tabla.sql", sp.m_CreaTabla());
//            arch_Doc.m_SobreEscribir(str_DirecProcedimientos + "/" + proyecto.getStr_ProcedimientoSQL() + str_NomBD + "_Insertar.sql", sp.m_Insertar());
//            arch_Doc.m_SobreEscribir(str_DirecProcedimientos + "/" + proyecto.getStr_ProcedimientoSQL() + str_NomBD + "_Modificar.sql", sp.m_Modificar());
            arch_Doc.m_SobreEscribir(str_DirecProcedimientos + "/" + proyecto.getStr_ProcedimientoSQL() + str_NomBD + "_Borrar.sql", sp.m_Borrar());
            arch_Doc.m_SobreEscribir(str_DirecProcedimientos + "/" + proyecto.getStr_ProcedimientoSQL() + str_NomBD + "_Consulta.sql", sp.m_Consultar());
            arch_Doc.m_SobreEscribir(str_DirecProcedimientos + "/" + proyecto.getStr_ProcedimientoSQL() + str_NomBD + "_DetalleXML.sql", sp.m_DetalleXML());
            arch_Doc.m_SobreEscribir(str_DirecProcedimientos + "/" + proyecto.getStr_ProcedimientoSQL() + str_NomBD + "_DetalleXML sin Anexos.sql", sp.m_DetalleXMLsinAnexo());
//            arch_Doc.m_SobreEscribir(str_DirecProcedimientos + "/" + proyecto.getStr_ProcedimientoSQL() + str_NomBD + "_Combo.sql", sp.m_Combo());
            arch_Doc.m_SobreEscribir(str_DirecProcedimientos + "/" + proyecto.getStr_ProcedimientoSQL() + str_NomBD + "_ComboPorNombre.sql", sp.m_ComboPorNombre());
            arch_Doc.m_SobreEscribir(str_DirecProcedimientos + "/" + proyecto.getStr_ProcedimientoSQL() + str_NomBD + "_Paquete_Spec.sql", sp.m_PaqueteSpec());
            arch_Doc.m_SobreEscribir(str_DirecProcedimientos + "/" + proyecto.getStr_ProcedimientoSQL() + str_NomBD + "_Paquete_Body.sql", sp.m_PaqueteBody());
            arch_Doc.m_SobreEscribir(str_DirecProcedimientos + "/" + proyecto.getStr_ProcedimientoSQL() + str_NomBD + "_InsertarModificar.sql", sp.m_InsertarModificar());
            arch_Doc.m_SobreEscribir(str_DirecProcedimientos + "/" + proyecto.getStr_ProcedimientoSQL() + str_NomBD + "_Sequence.sql", sp.m_Sequencia());
            arch_Doc.m_SobreEscribir(str_DirecProcedimientos + "/" + proyecto.getStr_ProcedimientoSQL() + str_NomBD + "_TriggerInsert.sql", sp.m_TriggerInsert());
            arch_Doc.m_SobreEscribir(str_DirecProcedimientos + "/" + proyecto.getStr_ProcedimientoSQL() + str_NomBD + "_TriggerUpdate.sql", sp.m_TriggerUpdate());

            arch_Doc.m_SobreEscribir(str_DirecDocumentacion + "/diccionarioDatos.txt", doc.m_DiccionarioDatos());

            JOptionPane.showMessageDialog(null, "Capas creadas");
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Error JP_BaseDatos.escribeArchivos: " + arch_Doc.dameError() + "\nException: " + ex.getMessage());
            String str_Error = "Error JP_BaseDatos.escribeArchivos: " + arch_Doc.dameError() + "\nException: " + ex.getMessage();
            System.out.println(str_Error);
        }
    }

    /**
     * Metodo para crear la linea de cada campo de la tabla
     *
     * @return str_Campo
     */
    private String m_CamposTabla() {
        String str_Campo;
        str_Campo = "";
        for (int i = 0; i < camposBD.length; i++) {
            str_Campo += camposBD[i].getStr_NomCampo() + "="
                    + camposBD[i].getStr_Tipo() + "="
                    + camposBD[i].getStr_Tamaño() + "="
                    + camposBD[i].getStr_Nulo() + "="
                    + camposBD[i].getStr_Ordenar() + "\n";
        }
        return str_Campo;
    }

    /**
     *
     * @param str_NomArchivo
     * @param str_NomTabla
     */
    public void m_AsignarCampos(String str_NomArchivo, String str_NomTabla) {
        Archivo archivo = new Archivo();
        try {
            archivo.m_LeerMultiTokens(str_NomArchivo, 5, "=");
            StringTokenizer sT_Alto = new StringTokenizer(str_NomTabla, ".");
            txt_NomEsquemaBD.setText(sT_Alto.nextToken());
            txt_NomBD.setText(sT_Alto.nextToken());
            tabla.setStr_NomEsquema(txt_NomEsquemaBD.getText());
            tabla.setStr_NomTabla(txt_NomBD.getText());
            camposBD = new CampoBD[archivo.getInt_TotalLineas()];
            int_Cantidad = camposBD.length;
            txt_Cantidad.setText(int_Cantidad+"");
            setVisible(false);
            jP_Var.removeAll();
            addComponentes2();
            for (int i = 0; i < camposBD.length; i++) {
                camposBD[i] = new CampoBD();
                camposBD[i].setStr_NomCampo(archivo.dameLinea_Separada()[i].getStr_Palabras(0));
                camposBD[i].setStr_Tamaño(archivo.dameLinea_Separada()[i].getStr_Palabras(2));
                camposBD[i].setStr_Tipo(archivo.dameLinea_Separada()[i].getStr_Palabras(1));
                camposBD[i].setStr_Nulo(archivo.dameLinea_Separada()[i].getStr_Palabras(3));
                camposBD[i].setStr_Ordenar(archivo.dameLinea_Separada()[i].getStr_Palabras(4));
                txt_Var[i].setText(camposBD[i].getStr_NomCampo());
                txt_Tamaño[i].setText(camposBD[i].getStr_Tamaño());
                for (int k = 0; k < cbo_Tipo[i].getItemCount(); k++) {
                    if (cbo_Tipo[i].getItemAt(k).equals(camposBD[i].getStr_Tipo())) {
                        cbo_Tipo[i].setSelectedIndex(k);
                        break;
                    }
                }
                if (camposBD[i].getStr_Nulo().equals("SI")) {
                    chx_Nulo[i].setSelected(true);
                }
                if (camposBD[i].getStr_Ordenar().equals("SI")) {
                    chx_Ordena[i].setSelected(true);
                }

            }
            tabla.setCamposBD(camposBD);
            setVisible(true);

        } catch (Exception ex) {
            System.out.println("Error m_AsignarCampos: " + ex.getMessage() + " : " + archivo.dameError());
        }

    }

    /**
     *
     */
    public void m_MostrarPanelTabla() {
        if (!txt_NomBD.getText().equals("") || !txt_Cantidad.getText().equals("")) {
            setVisible(false);
            igualaDatos();
            jP_Var.removeAll();
            addComponentes2();
            setVisible(true);
        }
    }

    /* ************************************************************************
     ***                 Seccion de Eventos                                 ***
     **************************************************************************/
    private void addEventos() {
        btn_Aceptar.addActionListener(new JP_BaseDatos_Evento(JP_BaseDatos.this, 0));
        btn_Buscar.addActionListener(new JP_BaseDatos_Evento(JP_BaseDatos.this, 1));
        btn_Generar.addActionListener(new JP_BaseDatos_Evento(JP_BaseDatos.this, 2));

//        cbo_Pre.addActionListener(new ActionListener() {
//            public void actionPerformed(ActionEvent e) {
//                String pre = "" + txt_NomBD.getText().charAt(0) + txt_NomBD.getText().charAt(1) + txt_NomBD.getText().charAt(2);
//                if (cbo_Pre.getSelectedIndex() == 3) {
//                    txt_Pre.setText("");
//                    txt_PreNom.setText("");
//                } else {
//                    txt_Pre.setText(str_Prefijos[cbo_Pre.getSelectedIndex()]);
//                    txt_PreNom.setText(pre);
//                }
//            }
//        });
    }
}
